#include <stdlib.h>
#include <string.h>
#include "pvm.h"

#ifndef PARSER_H_
#define PARSER_H_

typedef struct _Liste Liste;
struct _Liste {
	char *nom;            /*!<  Nom de l'élément */
	REG adresse;          /*!<  L'adresse memoire de l'élément */
	Liste *suivant;       /*!<  Élement suivant dans la liste */
};

Liste *add_List(Liste *dernier, REG pointeur, char *nom);
Liste *next_List(Liste *actuel);
bool get_List(Liste *dernier, char *nom, REG *pointeur);

typedef struct {
	char *current;        /*!<  La ligne courante */
	unsigned int row;     /*!<  la ligne étant parsée */
	unsigned int col;     /*!<  la colonne étant parsée */

	REG pc;               /*!<  L'adresse mémoire courante */
	Mot* mem;      		  /*!<  L'état de la mémoire */
	REG memsize;          /*!<  La taille de la mémoire */
	FILE* fp;             /*!<  Fichier courant */

	Liste* labels; 		  /*!<  Liste des étiquettes du programme */
} Parser;

bool load_program(char *filename, PVM* pvm);

#endif
